Neues Protokoll fr CAT: Basisnachricht: 0x8003 Aufbau: msgbuf[0] = 0x8003; (* Message-ID *) msgbuf[1] = apId; (* CAT bzw. Kommunikationspartner, Absender halt *) msgbuf[2] = 0; (* Oversize, immer 0 *) msgbuf[3] = sub-opcode; msgbuf[4+5] = L„nge des Buffers; msgbuf[6+7] = Adresse des Buffers; Die Kommunikation l„uft haupts„chlich unidirectional ab, d.h. eine Applikation fordert etwas an und CAT antwortet. Nur sehr wenige Nachrichten werden von CAT unaufgefordert verschickt. Prinzipiell l„uft es so: Die Applikation m”chte etwas wissen und fragt bei CAT nach. Dazu bergibt es einen Buffer und die L„nge dieses Buffers. CAT kopiert die gewnschte Information in den Buffer. Da man teilweise auch variabel lange Daten abfragen m”chte, gibt es folgende M”glichkeit: Das ACC fragt mit Bufferl„nge 0 an und erh„lt als Antwort in der Bufferl„nge die notwendige L„nge des Buffers, um die gewnschte Information aufnehmen zu k”nnen. Da die L„nge, die CAT zurckliefert, die reine L„nge der Daten ist, sollte man noch ein Byte fr das anh„ngenden Nullzeichen als String- abschluž hinzurechnen. Bei einer L„nge von 0 ist die Information nicht verfgbar. Man kann sie trotzdem abfragen, erh„lt aber halt einen leeren String zurck. Nach der L„ngenabfrage kann die andere Applikation mit einem passend allozierten Buffer nochmal anfragen. Der Buffer muž unter Systemen mit memory protection von CAT beschreibbar sein. CAT selber stellt keinen Buffer dafr zur Verfgung. Sollte der bergebene Buffer fr die Daten nicht ausreichen, so gibt CAT keinerlei Daten zurck, sondern liefert eine ERROR-Antwort zurck. Dieses Protokoll sollte auch fr andere Frontends (namentlich: THE_DOT) implementierbar sein, da auch eine Teilimplementation mit den notwendigen Funktionen z.B. fr CATalog m”glich ist. Dafr reicht es, die An- und Abmeldung zu implementieren und die Abfragen fr Name, Betreff und Gruppe. Alle Werte bis auf die apId sind brigens unsigned! Folgende Sub-Opcodes sind definiert: 00: ACKNOWLEDGE (kein Buffer) 01: ERROR (kein Buffer) 02: Anmeldung bei CAT 03: Abmeldung bei CAT 04: Abfrage Absender 05: Abfrage Realname 06: Abfrage Empf„nger 07: Abfrage MsgId (#-Zeile) 08: Abfrage lange MsgId (I-Zeile) 09: Abfrage '-'-Zeile 10: Abfrage Ref-Id (R-Zeile) 11: Abfrage Stichwort 12: Abfrage Organization (O-Zeile) 13: Abfrage Gateway (Y-Zeile) 14: Abfrage Distribution (D-Zeile) 15: Abfrage Mime (M-Zeile) 16: Abfrage Status pers”nliche Nachricht 17: Abfrage Followup-To (F-Zeile) 18: Abfrage Reply-To 19: Abfrage Message-Text 20: Abfrage Message-Datum 21: Abfrage Status-Datum 22: Abfrage Gruppe 23: Abfrage Originaltext, wie in Datenbank gespeichert 24: Abfrage eigene Nachricht 25: Abfrage eindeutige Id 26: Abfrage Sender-Name aus Sender-Zeile (S-Zeile) 27: Abfrage Name im Fenster 100: Neue Nachricht in Fenster (CAT => ACC) 101: CAT wird beendet Weitere Sub-Opcodes werden bei Bedarf eingefhrt. Einige Sub-Opcodes sind zwar definiert und werden von CAT auch bearbeitet, aber da die Daten nicht vorhanden sind, wird immer 0 als L„nge zurckgegeben und keine Daten. Dies betrifft insbesondere Followup-To und teilweise ReplyTo. Im folgenden werden die Sub-opcodes etwas genauer beschrieben: 00: ACKNOWLEDGE Das ist die Antwort von CAT auf die An-/Abmeldung vom ACC, wenn diese geklappt hat. Ansonsten bekommt das ACC ERROR zurck. msgbuf[4-7] sind 0, da kein Buffer bergeben wird. 01: ERROR Das ist die Antwort von CAT auf die An-/Abmeldung vom ACC, wenn diese nicht geklappt hat. Drfte nur bei extremen Speichermangel passieren. Aužerdem wird ERROR bei jeder nicht implementierten Funktion zurckgegeben. msgBuf[4] enth„lt den sub-opcode, der zu dem Fehler fhrte. msgbuf[5-7] sind 0. 02: Anmeldung bei CAT Dies schickt ein ACC an CAT zur Anmeldung. Damit wird es ber Nachrichtenwechsel automatisch informiert und kann die Informationen dann von CAT abfragen. msgbuf[4-7] sind 0, da kein Buffer bergeben wird. 03: Abmeldung bei CAT Damit meldet sich ein ACC wieder bei CAT ab. Das ACC wird aus der Liste der beteiligten Empf„nger ausgetragen und erh„lt als Antwort ein ACKNOWLEDGE. msgbuf[4-7] sind 0, da kein Buffer bergeben wird. Die folgenden Funktionen sind alles Abfrage-Funktionen, die ein Element einer Nachricht abfragen k”nnen. Bei allen Elementen ist es m”glich, das CAT nichts zurckliefert. In dem Fall wird in dem Buffer einfach ein leerer String zurckgegeben. Wenn nur die L„nge abgefragt wird durch eine bergebene Bufferl„ngee von 0, gibt CAT auch eine 0 als L„nge zurck. Die Antwort besteht immer aus der gleichen Nachricht wie die Anfrage. 04: Abfrage Absender Absender der Nachricht, falls vorhanden (Mailadresse). 05: Abfrage Realname Realname des Absenders, falls vorhanden. 06: Abfrage Empf„nger Empf„nger der Nachricht, falls vorhanden (meistens nur bei PMs) 07: Abfrage MsgId (#-Zeile) Message-Id aus der #-Zeile, ist immer vorhanden 08: Abfrage lange MsgId (I-Zeile) Lange Message-Id, meistens vorhanden 09: Abfrage '-'-Zeile Verkettung nach oben 10: Abfrage Ref-Id (R-Zeile) Verkettung ber lange Id 11: Abfrage Stichwort Stichwort der Nachricht, kann auch leer sein. 12: Abfrage Organization (O-Zeile) O-Zeile aus Outfile 13: Abfrage Gateway (Y-Zeile) Y-Zeile aus Outfile 14: Abfrage Distribution (D-Zeile) D-Zeile aus Outfile. Inhalt: K, L, M, N: Keine, Lokal, MausNet, Net 15: Abfrage Mime (M-Zeile) Inhalt der M-Zeile. Eventuelle Fortsetzung im Text wird nicht zurckgegeben. 16: Abfrage Status pers”nliche Nachricht Nur bei PMs vorhanden, sondern wird nichts zurckgeliefert. 17: Abfrage Follow-Up To (F-Zeile) Wird zurckgegeben, wenn es im Outfile vorhanden war, also momentan noch gar nicht. Aužerdem kann CAT es noch nicht. Daher liefert das immer einen leeren String. 18: Abfrage Reply-To Wird zurckgegeben, wenn es im Outfile vorhanden war, also momentan noch gar nicht. Aužerdem kann CAT es noch nicht. Daher liefert das immer einen leeren String. 19: Abfrage Message-Text Liefert den gesamten Text der Nachricht zurck, wie er in der Datenbank gespeichert ist. L„nge ist theoretisch nicht begrenzt, praktisch momentan auf 64 KB. Es wird von CAT momentan der Text zurckgegeben, wie er an den Editor bergeben wurde. Eventuelle Filterungen von MIME-Opcodes sind dort schon durchgefhrt worden und der Text wurde noch nicht umbrochen, d.h. es k”nnen lange Zeilen vorkommen. Der Text wird im internen Format von CAT bergeben, d.h. als Zeilenende dient ein einzelnes LF. 20: Abfrage Message-Datum Liefert Erstellungsdatum der Nachricht im GEMDOS-Format zurck. Im ersten Wort im Buffer das Datum, im zweiten die Zeit. Theoretisch k”nnte man das auch komplett in den Messagebuffer packen und mžte nicht einen Speicherblock bergeben, aber zur Vereinheitlichung der Implementation wird auch hier der bergebene Speicherblock benutzt. 21: Abfrage Statusdatum Liefert Statusdatum der pers”nlichen Nachricht im GEMDOS-Format zurck. Wenn es keine PM ist, wird nur 0 als Zeit und Datum zurckgeliefert. Ansonsten gilt das gleiche wie bei 20. 22: Abfrage Gruppe Liefert den Namen der aktuellen Gruppe. 23: Abfrage Originaltext Liefert den gesamten Text der Nachricht zurck, wie er in der Datenbank gespeichert ist. L„nge ist theoretisch nicht begrenzt, praktisch momentan auf 64 KB. Es wird von CAT der Text zurckgegeben, wie er in der Datenbank gespeichert wurde, d.h. es wurden keine Filterungen durchgefhrt, keine Infozeilen in den Text eingeblendet etc. Der Text wird im internen Format von CAT bergeben, d.h. als Zeilenende dient ein einzelnes LF. 24: Abfrage eigene Nachricht Fragt nach, ob im Fenster eine eigene Nachricht dargestellt wird. Liefert nur in der pers”nlichen Gruppe bei eigenen Nachrichten TRUE zurck. Im Buffer wird ein Wort bergeben, das 1 ist fr eine eigene pers”nliche Nachricht, und sonst 0. Weitere Werte werden nicht zurckgeliefert. 25: Abfrage eindeutige Id Fragt nach einer eindeutigen ID pro Nachricht. Gibt einen unsigned long zurck, der die Nachricht innerhalb eines CAT-Laufes innerhalb einer Datenbank eindeutig identifiziert. 26: Abfrage Absender aus Sender-Zeile Liefert den Absender zurck, wie er in der Sender-Zeile (S-Zeile) im Outfile kam 27: Abfrage Absendername im Fenster Liefert den Namen zurck, den CAT im Fenster anzeigt. Bei eigenen pers”nlichen Nachrichten ist das der des Empf„ngers, sonst der des Absenders. Die folgende Nachricht wird nur von CAT an die angemeldeten Applikationen verschickt, und zwar jedesmal, wenn im obersten Anzeigefenster eine neue Nachricht dargestellt wird. Die Nachricht wird auch verschickt, wenn ein Anzeigefenster nur getoppt wird. 100: Neue Nachricht in Fenster msgbuf[4-7] sind 0, da kein Buffer bergeben wird. Die folgende Nachricht wird nur von CAT an die angemeldeten Applikationen verschickt, und zwar jedesmal, wenn CAT beendet wird. 101: CAT wird beendet Wird verschickt, wenn CAT beendet wird. msgbuf[4-7] sind 0. Hier noch die Definition der einzelnen Nachrichten, wie sie in CAT implementiert ist: CONST CatProtoMsg = 8003H; (* Neues CAT-Protokoll *) (* Sub-Opcodes fr neues CAT-Protokoll *) (* Doku: Siehe NEWPROTO.TXT *) CAT_ACK = 0; CAT_ERROR = 1; CAT_LOGIN = 2; CAT_LOGOFF = 3; CAT_SENDER = 4; CAT_RNAME = 5; CAT_RECEIVER = 6; CAT_MAUS_ID = 7; CAT_MSG_ID = 8; CAT_MAUS_REF = 9; CAT_REF = 10; CAT_TOPIC = 11; CAT_BOX = 12; CAT_GATE = 13; CAT_DIST = 14; CAT_MIME = 15; CAT_STATUS = 16; CAT_FOLLOWUP = 17; CAT_REPLYTO = 18; CAT_TEXT = 19; CAT_MSG_DATE = 20; CAT_STATUS_DATE = 21; CAT_GROUP = 22; CAT_ORG_TEXT = 23; CAT_IS_OWN = 24; CAT_UNIQUE_ID = 25; CAT_REAL_SENDER = 26; CAT_WDW_NAME = 27; CAT_NEW_MSG = 100; CAT_TERMINATE = 101;